﻿
namespace Patterns4Net.Tests.Core.CecilExtensions
{
    using System;

    public abstract class Bar
    {
        public abstract void AbstractM();

        public virtual int VirtualM()
        {
            return 0;
        }

        public virtual void OverriddenM()
        {
        }

        public virtual void ToBeSealed()
        {
        }
    }

    public class Foo : Bar, IComparable, ICloneable
    {
        public override void AbstractM()
        {
        }

        public override void OverriddenM()
        {
        }

        public sealed override void ToBeSealed()
        {
        }

        public int CompareTo(object obj)
        {
            return 0;
        }

        object ICloneable.Clone()
        {
            return new object();
        }
    }

    public class Baz : Foo
    {
        public override int VirtualM()
        {
            return 3;
        }

        public void Moo()
        {            
        }
    }
}
